package com.ruoyi.womp.mqhandler;

import java.util.ArrayList;
import java.util.List;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.womp.config.RabbitMQConfig;
import com.ruoyi.womp.tools.DateUtil;

@Component("realTimeDataPushTest3")
public class RealTimeDataPushTestTask3 {

	final static String TASK_NAME = "三台面1";

	@Autowired
	RabbitTemplate rabbitTemplate;
	@Autowired
	RedisTemplate<String, String> redisTemplate;

	public void execute() {
		try {
			String waCode = "ZGUT001";

			int numCZ = 8;
			int numLD = 8;
			int numZL = 2;
			int numGF = 8;
			int numGJ = 2;
			int numAC = 1;
			// int numWD = 1;
			int numSD = 1;
			int numSW = 2;

			JSONObject dataJsonObject = new JSONObject();
			dataJsonObject.put("type", 1);

			JSONObject messageJsonObject = new JSONObject();
			messageJsonObject.put("waCode", waCode);
			messageJsonObject.put("time", DateUtil.sysDateTime());

			JSONArray dataJsonArray = new JSONArray();
			// 垂直度
			for (int i = 1; i <= numCZ; i++) {
				List<Double> list = new ArrayList<Double>();
				list.add(0.22);
				list.add(0.03);
				list.add(0.02);
				list.add(0.00);
				list.add(0.10);
				list.add(0.01);
				list.add(0.00);
				list.add(0.11);

				JSONObject jsonObject = new JSONObject();
				jsonObject.put("code", "CZ");
				jsonObject.put("orderNum", i);

				double num = Math.random();
				double value = Double.parseDouble(String.format("%.2f", list.get(i - 1)));
				if (i == 1 || i == 2 || i == 5) {
					jsonObject.put("value", value + num / 100 + num / 100);
				} else {
					jsonObject.put("value", value);
				}
				dataJsonArray.add(jsonObject);
			}

			for (int i = 1; i <= numLD; i++) {
				List<Integer> list = new ArrayList<Integer>();
				list.add(450);
				list.add(750);
				list.add(340);
				list.add(458);
				list.add(353);
				list.add(234);
				list.add(405);
				list.add(754);

				JSONObject jsonObject = new JSONObject();
				jsonObject.put("code", "LD");
				jsonObject.put("orderNum", i);
				// Double value = Math.random() * (100);
				// jsonObject.put("value", value.toString().substring(0, 4));
				jsonObject.put("value", list.get(i - 1));

				dataJsonArray.add(jsonObject);
			}

			// 分零点
			for (int i = 1; i <= numZL; i++) {
				List<Integer> list = new ArrayList<Integer>();
//				list.add(random.nextInt(1000));
//				list.add(random.nextInt(2000));
				list.add(0);
				list.add(0);

				JSONObject jsonObject = new JSONObject();
				jsonObject.put("code", "ZL");
				jsonObject.put("orderNum", i);
				jsonObject.put("value", list.get(i - 1));

				dataJsonArray.add(jsonObject);
			}

			// 轨缝
			for (int i = 1; i <= numGF; i++) {
				List<Double> list = new ArrayList<Double>();
				list.add(2.25);
				list.add(2.43);
				list.add(3.53);
				list.add(3.60);
				list.add(3.51);
				list.add(2.57);
				list.add(2.51);
				list.add(2.71);

				JSONObject jsonObject = new JSONObject();
				jsonObject.put("code", "GF");
				jsonObject.put("orderNum", i);

				double num = Math.random();
				double value = Double.parseDouble(String.format("%.2f", list.get(i - 1)));
				jsonObject.put("value", value + num / 100);

				dataJsonArray.add(jsonObject);
			}

			// 轨距
			for (int i = 1; i <= numGJ; i++) {
				JSONObject jsonObject = new JSONObject();
				jsonObject.put("code", "GJ");
				jsonObject.put("orderNum", i);
				jsonObject.put("value", 1435);

				dataJsonArray.add(jsonObject);
			}

			// 电压
			for (int i = 1; i <= numAC; i++) {
				JSONObject jsonObject = new JSONObject();
				jsonObject.put("code", "AC");
				jsonObject.put("orderNum", i);
				jsonObject.put("value", 220);

				dataJsonArray.add(jsonObject);
			}

			// 室外温度
//			for (int i = 1; i <= numWD; i++) {
//				JSONObject jsonObject = new JSONObject();
//				jsonObject.put("code", "WD");
//				jsonObject.put("orderNum", i);
//				jsonObject.put("value", random.nextInt(1) + 26);
//
//				dataJsonArray.add(jsonObject);
//			}

			for (int i = 1; i <= numSD; i++) {
				JSONObject jsonObject = new JSONObject();
				jsonObject.put("code", "SD");
				jsonObject.put("orderNum", i);
				jsonObject.put("value", "33.20");

				dataJsonArray.add(jsonObject);
			}

			for (int i = 1; i <= numSW; i++) {
				List<Double> list = new ArrayList<Double>();
				list.add(12d);
				list.add(15d);

				JSONObject jsonObject = new JSONObject();
				jsonObject.put("code", "SW");
				jsonObject.put("orderNum", i);
				jsonObject.put("value", list.get(i - 1));

				dataJsonArray.add(jsonObject);
			}

			messageJsonObject.put("data", dataJsonArray);
			dataJsonObject.put("message", messageJsonObject);

			// System.out.println(dataJsonObject.toJSONString());
			rabbitTemplate.convertAndSend(RabbitMQConfig.MQ_EXCHANGE_FANOUT_REALTIME_DATA,
					RabbitMQConfig.MQ_ROUTINGKEY_REALTIME_DATA, dataJsonObject.toJSONString());

			// 告警数据
//			JSONObject alarmJsonObject = new JSONObject();
//			alarmJsonObject.put("type", 2);
//
//			JSONObject alarmMessageJsonObject = new JSONObject();
//			alarmMessageJsonObject.put("waCode", waCode);
//			alarmMessageJsonObject.put("time", DateUtil.sysDateTime());
//
//			JSONArray alarmDataJsonArray = new JSONArray();
//			JSONObject alarmDataJsonObject = new JSONObject();
//			alarmDataJsonObject.put("code", "CZ");
//			alarmDataJsonObject.put("orderNum", 1);
//			alarmDataJsonObject.put("value", 0.5);
//			alarmDataJsonObject.put("message", "倾角过大");
//			alarmDataJsonObject.put("alarm", 1);
//			alarmDataJsonArray.add(alarmDataJsonObject);
//
//			alarmMessageJsonObject.put("data", alarmDataJsonArray);
//
//			alarmJsonObject.put("message", alarmMessageJsonObject);
//
//			rabbitTemplate.convertAndSend(RabbitMQConfig.MQ_EXCHANGE_FANOUT_REALTIME_DATA,
//					RabbitMQConfig.MQ_ROUTINGKEY_REALTIME_DATA, alarmJsonObject.toJSONString());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}